import java.util.ArrayList;
import java.util.List;

public class Dsj {
        /**
         * 属性1：名称
         */
        private String name;

        /**
         * 属性2：年龄
         */
        private int age;

        /**
         * 属性3：描述列表
         */
        private List<String> descriptions;

        /**
         * 默认构造方法
         */
        public Dsj() {
            this.name = "默认名称";
            this.age = 0;
            this.descriptions = new ArrayList<>();
        }

        /**
         * 带参数构造方法
         *
         * @param name  名称
         * @param age   年龄
         * @param descs 描述列表
         */
        public Dsj(String name, int age, List<String> descs) {
            if (name == null || name.isEmpty()) {
                throw new IllegalArgumentException("名称不能为空");
            }
            if (age < 0) {
                throw new IllegalArgumentException("年龄不能是负数");
            }
            this.name = name;
            this.age = age;
            this.descriptions = (descs != null) ? new ArrayList<>(descs) : new ArrayList<>();
        }

        /**
         * 获取名称的方法
         *
         * @return 名称
         */
        public String getName() {
            return name;
        }

        /**
         * 设置名称的方法`
         *
         * @param name 名称
         */
        public void setName(String name) {
            if (name == null || name.isEmpty()) {
                throw new IllegalArgumentException("名称不能为空");
            }
            this.name = name;
        }

        /**
         * 添加描述的方法
         *
         * @param description 描述
         */
        public void addDescription(String description) {
            if (description == null || description.isEmpty()) {
                throw new IllegalArgumentException("描述不能为空");
            }
            descriptions.add(description);
        }

        /**
         * 获取描述列表的方法，并去除空字符串
         *
         * @return 描述列表
         */
        public List<String> getDescriptions() {
            List<String> filteredDescs = new ArrayList<>();
            for (String desc : descriptions) {
                if (desc != null && !desc.isEmpty()) {
                    filteredDescs.add(desc);
                }
            }
            return filteredDescs;
        }

        /**
         * 打印所有描述的方法，如果描述列表为空，则打印提示信息
         */
        public void printDescriptions() {
            if (descriptions.isEmpty()) {
                System.out.println("没有描述信息。");
            } else {
                for (String desc : descriptions) {
                    System.out.println(desc);
                }
            }
        }

        /**
         * 示例方法，对字符串进行处理并抛出异常
         *
         * @param input 输入字符串
         * @return 处理后的字符串
         * @throws IllegalArgumentException 如果输入字符串为空或仅包含空白字符
         */
        public String processString(String input) throws IllegalArgumentException {
            if (input == null || input.trim().isEmpty()) {
                throw new IllegalArgumentException("输入字符串不能为空或仅包含空白字符");
            }
            // 对字符串进行简单处理，例如转换为大写
            return input.toUpperCase();
        }

        /**
         * 示例方法，模拟可能抛出异常的操作
         *
         * @param flag 标志位，用于模拟异常抛出
         */
        public void simulateException(boolean flag) {
            try {
                if (flag) {
                    throw new RuntimeException("模拟异常抛出");
                }
                System.out.println("没有抛出异常。");
            } catch (RuntimeException e) {
                System.err.println("捕获到异常：" + e.getMessage());
            }
        }

        // 主方法，用于测试
        public static void main(String[] args) {
            try {
                Dsj example = new Dsj("张三", 25, new ArrayList<String>() {{
                    add("描述1");
                    add("描述2");
                }});
                example.addDescription("描述3");
                example.printDescriptions();

                String processedString = example.processString("  hello  ");
                System.out.println("处理后的字符串：" + processedString);

                example.simulateException(true);
                example.simulateException(false);

            } catch (IllegalArgumentException e) {
                System.err.println("输入参数错误：" + e.getMessage());
            }
        }
    }
